/******************************************************************************/
/* Fichero:     Busqueda.java
/* Versión:     1.0
/* Autor:       Luis Maqueda
/* Fecha:       Mayo 2009
/* Proyecto:    AELANsoft cumpleaños
/* Descripción: Hereda de la clase VectorPersonas.
/******************************************************************************/
package utiles;

/******************************************************************************/
public class Busqueda extends VectorPersonas {
/******************************************************************************/

   /***************************************************************************
    * Constructor de clase.
    * Pre: se ha invocado el método de RealizarBusqueda() de usuario.
    * Post: crea el vector de búsqueda del usuario. El vector de búsqueda, se
    * pasa como parámetro.
    * @param busqueda Vector de busqueda
    **************************************************************************/
   public Busqueda(VectorPersonas busqueda) {
      // Llamamos al constructor del padre
      super();

      // Almacenamos la lista de amigos encontrados
      if (busqueda.size() > 0) {
         this.clear();
         for (int i = 0; i < busqueda.size(); i++) {
            this.add(busqueda.elementAt(i));
         }
         // Ordenamos la lista de amigos
         OrdenarBusqueda(0, busqueda.size()-1);
      }
   }

   /***************************************************************************
    * Post: El vector de personas de amigos se ordena utilizando el algoritmo
    * QuickSort
    * @param primero Indice del primer elemento del vector
    * @param ultimo Indice del ultimo elemento del vector
    * usuario dado
    **************************************************************************/
   private void OrdenarBusqueda(int primero, int ultimo) {
      // Variables
      int i, j;
      Persona pivote;
      Persona auxiliar;

      i = primero;
      j = ultimo;
      pivote = (Persona)this.elementAt((primero + ultimo) / 2);
      do {
         while (((Persona) (this.elementAt(i))).compararNombre(pivote) < 0) {
            i++;
         }
         while (((Persona) (this.elementAt(j))).compararNombre(pivote) > 0) {
            j--;
         }
         if (i <= j) {
            auxiliar = (Persona) this.elementAt(j);
            this.setElementAt(this.elementAt(i), j);
            this.setElementAt(auxiliar, i);
            i++;
            j--;
         }
      } while (i <= j);
      if (primero < j) {
         OrdenarBusqueda(primero, j);
      }
      if (ultimo > i) {
         OrdenarBusqueda(i, ultimo);
      }
   }

   /***************************************************************************
    * Pre: Se ha invocado el método AñadirAmigo() de usuario.
    * indiceGUI >= 1 AND indiceGUI <= longitud(vectorResultados)
    * Post: Elimina la componente del vector de búsqueda utilizada en el método
    * AñadirAmigo() de Usuario.
    * @param indiceGUI Indice de la componente a eliminar
    * @return
    **************************************************************************/
   public Persona EliminaUnResultado(int indiceGUI) {
      return (Persona) this.remove(indiceGUI);
   }

   /***************************************************************************
    * Pre: indiceAmigo <= this.size()
    * Post: Devuelve el correo de la persona del vector de busqueda cuyo indice
    * es indiceAmigo
    * @param indiceAmigo Indice de la componente a buscar
    * @return correo correo electronico de la persona del vector de busqueda
    *         cuyo indice es indiceAmigo
    **************************************************************************/
   public String ObtenerCorreo(int indiceAmigo) {
      return ((Persona) this.elementAt((this.nPagina-1) *
         15 + indiceAmigo)).correo;
   }
}
